<?php
require_once '../conexao/ConexaoPDO.php';
require_once '../interfaces/IRepositorioConta.php';
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of RepositorioClasse
 *
 * @author Livyson
 */
class RepositorioConta implements IRepositorioConta {

    private $conexaoPDO;

    public function __construct() {
        $this->conexaoPDO = new ConexaoPDO();
    }

    public function atualizar(Conta $conta) {
        try {
            $con = $this->conexaoPDO->abrir();
            $sql = "UPDATE CONTA SET descricao=:descricao, recebedor=:recebedor,
				     dataEmissao=:dataEmissao, valorPagamento=:valorPagamento,
                                     valorFatura=:valorFatura, desconto=:desconto, 
                                     situacao=:situacao, formaPagamento=:formaPagamento,
				     observacao=:observacao, codPessoa=:codPessoa,
                                     dataVencimento=:dataVencimento
                                     WHERE codigo=:codigo";
            $statement = $con->prepare($sql);
            $statement->bindValue(":descricao", $conta->getDescricao());
            $statement->bindValue(":recebedor", $conta->getRecebedor());
            $statement->bindValue(":dataEmissao", $conta->getDataEmissao());
            $statement->bindValue(":valorPagamento", $conta->getValorPagamento());
            $statement->bindValue(":valorFatura", $conta->getValorFatura());
            $statement->bindValue(":desconto", $conta->getDesconto());
            $statement->bindValue(":situacao", $conta->getSituacao());
            $statement->bindValue(":formaPagamento", $conta->getFormaPagamento());
            $statement->bindValue(":observacao", $conta->getObservacao());
            $statement->bindValue(":codPessoa", $conta->getPessoa()->getCodigo());
            $statement->bindValue(":codigo", $conta->getCodigo());
            $statement->bindValue(":dataVencimento", $conta->getDataVencimento());
            $statement->execute() or die("ERRO: ".mysql_error());
        } catch (Exception $ex) {
            echo ("Erro: " . $ex->getMessage());
        }
        $this->conexaoPDO->desconectar();
    }

    public function cadastrar(Conta $conta) {
        try {
            $con = $this->conexaoPDO->abrir();
            $sql = "INSERT INTO CONTA (descricao, recebedor, dataEmissao, 
                       dataCadastro, valorPagamento, valorFatura, desconto, 
                       situacao, formaPagamento, observacao, codPessoa, dataVencimento) values 
                       (:descricao, :recebedor, :dataEmissao, 
                       :dataCadastro, :valorPagamento, :valorFatura, :desconto, 
                       :situacao, :formaPagamento, :observacao, :codPessoa, :dataVencimento)";
            $statement = $con->prepare($sql);
            
            $statement->bindValue(":descricao", $conta->getDescricao());
            $statement->bindValue(":recebedor", $conta->getRecebedor());
            $statement->bindValue(":dataEmissao", $conta->getDataEmissao());
            $statement->bindValue(":dataCadastro", $conta->getDataCadastro());
            $statement->bindValue(":valorPagamento", $conta->getValorPagamento());
            $statement->bindValue(":valorFatura", $conta->getValorFatura());
            $statement->bindValue(":desconto", $conta->getDesconto());
            $statement->bindValue(":situacao", $conta->getSituacao());
            $statement->bindValue(":formaPagamento", $conta->getFormaPagamento());
            $statement->bindValue(":observacao", $conta->getObservacao());
            $statement->bindValue(":codPessoa", $conta->getPessoa()->getCodigo());
            $statement->bindValue(":dataVencimento", $conta->getDataVencimento());
            $statement->execute() or die("ERRO: ".mysql_error());
        } catch (Exception $ex) {
            echo ("Erro: " . $ex->getMessage());
        }
        $this->conexaoPDO->desconectar();
    }

    public function efetuarPagamento(Conta $conta) {
        try {
            $con = $this->conexaoPDO->abrir();
            $sql = "UPDATE CONTA SET situacao=:situacao, formaPagamento=:formaPagamento
			 WHERE codigo=:codigo";
            $statement = $con->prepare($sql);
            $statement->bindValue(":codigo", $conta->getCodigo());
            $statement->bindValue(":situacao", $conta->getSituacao());
            $statement->bindValue(":formaPagamento", $conta->getFormaPagamento());
            $statement->execute() or die("ERRO: ".mysql_error());
        } catch (Exception $ex) {
            echo ("Erro: " . $ex->getMessage());
        }
        $this->conexaoPDO->desconectar();
    }

    public function listar(Conta $conta) {
        try {
            $con = $this->conexaoPDO->abrir();
            $sql = "SELECT CONTA.* FROM CONTA INNER JOIN PESSOA WHERE 
                CONTA.codPessoa='".$conta->getPessoa()->getCodigo()."' AND 
                PESSOA.codigo='".$conta->getPessoa()->getCodigo()."'";
            $contas = $con->query($sql)->fetchAll();
        } catch (Exception $ex) {
            echo ("Erro: " . $ex->getMessage());
        }
        $this->conexaoPDO->desconectar();

        return $contas;
    }

    public function listarCondicionando($where) {
        try {
            $con = $this->conexaoPDO->abrir();
            $sql = "SELECT * FROM CONTA ".$where;
            $contas = $con->query($sql)->fetchAll();
            
        } catch (Exception $ex) {
            echo ("Erro: " . $ex->getMessage());
        }
        $this->conexaoPDO->desconectar();

        return $contas;
    }

    public function listarPagamentos(Conta $conta) {
        try {
            $con = $this->conexaoPDO->abrir();
            $sql = "SELECT * FROM CONTA WHERE codPessoa='".$conta->getPessoa()->getCodigo()."' AND situacao='PAGA'";            
            $contas = $con->query($sql)->fetchAll();
            
            
        } catch (Exception $ex) {
            echo ("Erro: " . $ex->getMessage());
        }
        $this->conexaoPDO->desconectar();

        return $contas;
    }

    public function listarPendencias(Conta $conta) {
        try {
            $con = $this->conexaoPDO->abrir();
            $sql = "SELECT * FROM CONTA WHERE codPessoa='".$conta->getPessoa()->getCodigo()."' AND (situacao='NAO_PAGA'
                    OR situacao='PARCIALMENTE_PAGA')"; 
            $contas = $con->query($sql)->fetchAll();
            
        } catch (Exception $ex) {
            echo ("Erro: " . $ex->getMessage());
        }
        $this->conexaoPDO->desconectar();

        return $contas;
    }

    public function procurar(Conta $conta) {
        try {
            $con = $this->conexaoPDO->abrir();
            $sql = "SELECT * FROM CONTA WHERE descricao='".$conta->getDescricao()."' OR codigo='".$conta->getCodigo()."'";
            $contas = $con->query($sql)->fetchAll() or die("ERRO: ".mysql_error());
            
        } catch (Exception $ex) {
            echo ("Erro: " . $ex->getMessage());
        }
        $this->conexaoPDO->desconectar();

        return $contas;
    }

    public function remover(Conta $conta) {
        try {
            $con = $this->conexaoPDO->abrir();
            $sql = "DELETE FROM CONTA WHERE codigo=:codigo";
            $statement = $con->prepare($sql);
            $statement->bindValue(":codigo", $conta->getCodigo());
            $statement->execute() or die("ERRO: ".  mysql_error());
        } catch (Exception $ex) {
            echo ("Erro: " . $ex->getMessage());
        }
        $this->conexaoPDO->desconectar();
    }

}

?>
